perm filename PACKMS.OLD[NEW,LCS] blob
sn#561095 filedate 1981-01-31 generic text, type T, neo UTF8
C**** PACKMS.F4 -- TO PACK TOGETHER MANY MS PROGRAM FILES *****
C LOAD WITH [NEW,LCS] MSSIO.FAI
DIMENSION NAMES(635),JEXT(200),JREC(235),
1 FIRST(128),SECOND(4000),INP(72)
C JREC(235) HAS 34 WDS FREE FOR MISC. INFO
EQUIVALENCE(JWDS,FIRST(19)),(KREC,JREC(202)),(JEXT,NAMES(201))
1 ,(JREC,NAMES(401))
IREC=1
JREC(1)=6
15 FORMAT(' P(ACK), U(NPACK), D(IRECTORY)? '$)
18 TYPE 15
ACCEPT 1,JWDS,K,L
IPU=0
MORE=0
IF(JWDS.EQ.'P')GO TO 2
INF=-1
IPU=-1
IF(JWDS.EQ.'D') IPU=-IPU
C PACK=0, UNPACK=-1, DIRECTORY=1
16 FORMAT(' TYPE PACK FILE NAME AND EXT.(DEFAULT EXT=.PAK) '$)
17 TYPE 16
ACCEPT 1,INP
X=' '
CALL NAMEXT(INP,IPAK,X)
IF(INP(1).EQ.' ')IPAK=JPAK
JPAK=IPAK
IF(X.EQ.' ')X='PAK'
IF(LOOKX(IPAK,X).EQ.0)GO TO 17
IF(IPU.GT.0)GO TO 113
1 FORMAT(72A1)
2 IF(IPU.LT.0)GO TO 41
TYPE 3
GO TO 42
41 TYPE 40
3 FORMAT(' TYPE FIRST NAME AND EXT.(DEFAULT EXT=.MS) '$)
40 FORMAT(' TYPE FIRST NAME AND EXT.(DEFAULT EXT=.MS) OR "ALL" '$)
4 FORMAT(' TYPE LAST NAME OR "ALL" (NO EXT, <CR>=1 FILE ONLY) '$)
42 ACCEPT 1,INP
KEXT=' '
CALL NAMEXT(INP,NAME,KEXT)
IF(KEXT.EQ.' ')KEXT='MS'
IF(IPU.LT.0.AND.NAME.EQ.'ALL')GO TO 122
IF(IPU.LT.0)GO TO 19
IF(LOOKX(NAME,KEXT).EQ.0)GO TO 2
19 TYPE 4
ACCEPT 1,INP
NAME2=' '
X2=' '
CALL NAMEXT(INP,NAME2,X2)
IF(NAME2.EQ.' ')NAME2=NAME
IF(X2.EQ.' ')X2=KEXT
IF(X2.NE.KEXT)GO TO 18
IF(IPU.LT.0)GO TO 121
IF(NAME2.EQ.'ALL')NAME2='99999'
12 IF(MORE.LT.0)GO TO 21
TYPE 16
ACCEPT 1,INP
X=' '
CALL NAMEXT(INP,IPAK,X)
IF(X.EQ.' ')X='PAK'
13 IF(LOOKX(IPAK,X).EQ.0)GO TO 10
TYPE 11
11 FORMAT(' WRITE OVER THAT NAME? '$)
ACCEPT 1,INP
IF(INP(1).NE.'Y')GO TO 12
10 CALL PUTEXT(IPAK,X)
CALL EXTOUT(NAMES,635)
C COME BACK AND FILL UP THE HEADER LATER.
21 NM=NAME
MORE=0
20 NMX=NM
NMZ=NM
6 IF(LOOKX(NM,KEXT).EQ.0)GO TO 1000
C JUMP IF NOT FOUND
7 CALL GETEXT(NM,KEXT)
CALL EXTIN(FIRST,128)
CALL EXTIN(SECOND,JWDS)
CALL EXTOUT(FIRST,128)
CALL EXTOUT(SECOND,JWDS)
TYPE 9,NM,KEXT
NAMES(IREC)=NM
JEXT(IREC)=KEXT
KREC=IREC
IREC=IREC+1
JREC(IREC)=JREC(IREC-1)+2+(JWDS-1)/128
C SAVE FOR USETI
IF(IREC.LT.201)NAMES(IREC)=0
14 IF(NM.EQ.NAME2.OR.IREC.EQ.200)GO TO 2000
C LIMIT OF 200 FILES AT THIS TIME.
NM=NM+2
GO TO 6
1000 NM=NMX+256
C UPDATE 4TH CHAR. (E.G. AAAAA TO AAABA)
NMX=NM
IF(LOOKX(NM,KEXT).LT.0)GO TO 7
NM=NMZ+32768
C UPDATE 3RD CHAR. (E.G. AAAAA TO AABAA)
NMX=NM
NMZ=NM
IF(LOOKX(NM,KEXT).LT.0)GO TO 7
C NOW ALL DONE. REBUILD HEADER.
2001 FORMAT(' ADD MORE TO FILE? '$)
2000 TYPE 2001
ACCEPT 1,K
MORE=-1
IF(K.EQ.'Y')GO TO 2
CALL USTO(1)
CALL EXTOUT(NAMES,635)
CALL FINEXT
TYPE 8,IPAK,X,KREC
CALL EXIT
8 FORMAT(' ***** ALL DONE WRITING ',A5,'.',A3/5XI3,' FILES')
9 FORMAT(1XA5,'.',A3)
122 IPU=4
121 TYPE 111
111 FORMAT(' CHANGE EXTENSION TO -- (<CR>=NO CHANGE) '$)
112 FORMAT(A3)
ACCEPT 112,NEXT
IF(NEXT.NE.' ')KEXT=NEXT
113 CALL GETEXT(IPAK,X)
CALL EXTIN(NAMES,635)
IF(IPU.LE.0)GO TO 114
GO TO(109,2,118,3000)IPU
118 GO TO 18
115 FORMAT(' TYPE NEW NAME AND EXT. '$)
119 MEXT=' '
TYPE 115
ACCEPT 1,INP
CALL NAMEXT(INP,NAME2,MEXT)
IF(MEXT.EQ.' ')MEXT=KEXT
NMX=0
DO 116 K=1,200
NN=NAMES(K)
MM=JEXT(K)
IF(NAME.EQ.NN.AND.KEXT.EQ.MM)NMX=K
116 IF(NAME2.EQ.NN.AND.MEXT.EQ.MM)GO TO 117
IF(NMX.NE.0)GO TO 120
TYPE 102
CALL EXIT
120 NAMES(NMX)=NAME2
JEXT(NMX)=MEXT
CALL EXIT
CCCC GO WRITE NEW FORM OF .PAK FILE GO TO ????
117 TYPE 11
ACCEPT 1,JWDS
IF(JWDS.NE.'Y')GO TO 18
114 NM=NAME
NN=NM
105 DO 101 K=1,200
101 IF(NAMES(K).EQ.NAME)GO TO 108
NAME=NM+256
NM=NAME
DO 107 K=1,200
107 IF(NAMES(K).EQ.NAME)GO TO 108
NAME=NN+32768
NN=NAME
NM=NN
DO 177 K=1,200
177 IF(NAMES(K).EQ.NAME)GO TO 108
106 IF(INF.NE.0)TYPE 102
GO TO 18
102 FORMAT(' FILE NOT FOUND')
108 CALL USTI(JREC(K))
CALL EXTIN(FIRST,128)
CALL EXTIN(SECOND,JWDS)
TYPE 9,NAME,KEXT
INF=0
104 IF(LOOKX(NAME,KEXT).EQ.0)GO TO 103
C IS FILE ALREADY ON DSK?
TYPE 11
ACCEPT 1,K
IF(K.EQ.'Y')GO TO 103
TYPE 3
ACCEPT 1,INP
CALL NAMEXT(INP,NAME,KEXT)
GO TO 104
103 CALL PUTEXT(NAME,KEXT)
CALL EXTOUT(FIRST,128)
CALL EXTOUT(SECOND,JWDS)
CALL FINEXT
IF(NAME.EQ.NAME2)CALL EXIT
NAME=NAME+2
GO TO 105
3004 FORMAT(3XI3,' FILES'/)
109 TYPE 3004,KREC
DO 110 K=1,200
IF(NAMES(K).EQ.0)GO TO 18
110 TYPE 9,NAMES(K),JEXT(K)
GO TO 18
3000 DO 3001 K=1,200
NM=NAMES(K)
IF(NM.EQ.0)CALL EXIT
MM=JEXT(K)
IF(NEXT.NE.' ')MM=NEXT
CALL EXTIN(FIRST,128)
CALL EXTIN(SECOND,JWDS)
TYPE 9,NM,MM
3003 IF(LOOKX(NM,MM).EQ.0)GO TO 3002
TYPE 11
ACCEPT 1,L
IF(L.NE.'Y')GO TO 3001
3002 CALL PUTEXT(NM,MM)
CALL EXTOUT(FIRST,128)
CALL EXTOUT(SECOND,JWDS)
CALL FINEXT
3001 CONTINUE
END
SUBROUTINE NAMEXT(I,NAME,IEXT)
C FINDS NAME.EXT IN A1 STRING
DIMENSION I(1)
IF(I(1).NE.-1)GO TO 9
C FIRST PASS UP 'G', 'GM', 'RS', ETC. (=-1)
DO 1 K=1,72
1 IF(I(K).EQ.' ')GO TO 2
C NOW PASS BLANKS
2 J=72
DO 3 J=K+1,72
3 IF(I(J).NE.' ')GO TO 4
C NOW FOUND START OF WORD (UNLESS ALL BLANKS)
4 IF(J.NE.72)GO TO 5
NAME=' '
RETURN
9 J=1
5 DO 6 K=J,72
IF(I(K).EQ.' ')GO TO 7
C JUMP IF NAME ONLY
6 IF(I(K).EQ.'.')GO TO 8
7 CALL PACKX(NAME,I(J))
RETURN
8 CALL RLOOP(I(61),I(J),K-J)
CALL PACKX(NAME,I(61))
CALL PACKX(IEXT,I(K+1))
END
SUBROUTINE PACKX(NAM,KNM)
DIMENSION KNM(5)
DATA KK/128/,LL/"377777777777/,JJ/"2000000000/
1 , MM/"774000000000/
NAM=0
DO 12 K=5,1,-1
NAM=NAM .OR. (KNM(K) .AND. MM)
IF (K.EQ.1)RETURN
17 IF (NAM.GE.0)GO TO 13
NAM = (( NAM .AND. LL)/KK) .OR. JJ
GO TO 12
13 NAM = NAM / KK
12 CONTINUE
RETURN
END